package org.example.nio_demo;

import java.nio.ByteBuffer;

/**
 * @ClassName Demo1
 * @Description
 * @Author zhangsw
 * @Date 2020/11/9 20:37
 * @Version 1.0
 */
public class Demo1 {
    /**
     * 缓冲区就是数组，用于存储不同类型的数据
     * 根据数据类型不同，提供了对应的缓冲区【基本类型中除了boolean都有】
     * ByteBuffer
     * CharBuffer
     * ShortBuffer
     * IntBuffer
     * LongBuffer
     * FloatBuffer
     * DoubleBuffer
     * 以上的缓冲区都是通过allocate() 获取缓冲区，以上的缓冲区最常用的就是ByteBuffer
     *
     * @param args
     */
    public static void main(String[] args) {
        String str = "abcde";
        //分配一个1024字节容量的缓冲区
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        System.out.println("-----------------allocate()----------------");
        System.err.println(buffer.position());//0
        System.err.println(buffer.limit());//1024
        System.err.println(buffer.capacity());//1024

        //利用put方法存入数据到缓冲区中
        buffer.put(str.getBytes());
        System.out.println("-----------------put()----------------");
        System.err.println(buffer.position());//5
        System.err.println(buffer.limit());//1024
        System.err.println(buffer.capacity());//1024

        //切换读写数据模式
        buffer.flip();
        System.out.println("-----------------flip()----------------");
        System.err.println(buffer.position());//0
        System.err.println(buffer.limit());//5
        System.err.println(buffer.capacity());//1024

        //利用get方法获取缓冲区中的数据
        byte[] dst = new byte[buffer.limit()];
        buffer.get(dst);
        System.err.println(new String(dst, 0, dst.length));

        System.out.println("-----------------get()----------------");
        System.err.println(buffer.position());//5
        System.err.println(buffer.limit());//5
        System.err.println(buffer.capacity());//1024

        buffer.rewind();//可重复读  想要重复读取缓冲区的数据可以调用此方法
        System.out.println("-----------------rewind()----------------");
        System.out.println(buffer.position());//0
        System.out.println(buffer.limit());//5
        System.out.println(buffer.capacity());//1024

        buffer.clear();//清空缓冲区   但是缓冲区中的数据依然存在，处于被遗忘的状态
        //也就是不能通过缓冲区的这几个属性获取到数据的信息
        System.out.println("-----------------clear()----------------");
        System.out.println(buffer.position());//0
        System.out.println(buffer.limit());//1024
        System.out.println(buffer.capacity());//1024

        System.err.println((char) buffer.get());
    }
}
